package com.user.service.ipl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

import com.user.feign.FeignApi;
import com.user.feign.FeignArticle;
import com.user.mapper.Apuseripl;
import com.user.mapper.UserMapper;
import com.user.service.UserServiceipl;


import com.usian.model.common.dtos.PageResponseResult;
import com.usian.model.common.dtos.ResponseResult;
import com.usian.model.common.enums.AppHttpCodeEnum;
import com.usian.model.media.pojos.WmUser;
import com.usian.model.user.dtos.AuthDto;
import com.usian.model.user.pojos.ApAuthor;
import com.usian.model.user.pojos.ApUser;
import com.usian.model.user.pojos.ApUserRealname;
import com.usian.model.user.pojos.UserConstants;


import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.Date;

@Service
public class UserService extends ServiceImpl<UserMapper, ApUserRealname> implements UserServiceipl {

    @Resource
    private FeignApi feignApi;

    @Resource
    private Apuseripl apuseripl;

    @Resource
    private FeignArticle feignArticle;

    @Override
    public ResponseResult list(AuthDto dto) {
        if (dto==null ) {
            return  ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID,"错误");
        }

        dto.checkParam();
        Page page=new Page(dto.getPage(),dto.getSize());

        LambdaQueryWrapper<ApUserRealname> qw=new LambdaQueryWrapper<>();
        qw.eq(dto.getStatus()!=null,ApUserRealname::getStatus,dto.getStatus());

        IPage<ApUserRealname> l=page(page,qw);

        ResponseResult result=new PageResponseResult(dto.getPage(),dto.getSize(),(int)l.getTotal());
        result.setData(l.getRecords());
        return result;
    }

//    @GlobalTransactional
    @Override
    public ResponseResult update(AuthDto dto, Integer status) {
        if (dto==null || dto.getId()==null){
            return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID);
        }
//        检查状态

        if(!xiugaistatus(status)){
            return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID);
        }
        ApUserRealname user=new ApUserRealname();
        user.setId(dto.getId());
        user.setStatus(status);

        if (dto.getMsg()==null){
            user.setReason(dto.getMsg());
        }
        updateById(user);
        if (status.equals(UserConstants.PASS_AUTH)){
            ResponseResult result=wemediaAndarticle(dto);
            if (result!=null){
                return result;
            }

        }
//
//        System.out.println(1/0);
        return null;
    }
//添加自媒体的账号和作家号的认证情况
    public ResponseResult wemediaAndarticle(AuthDto dto){
//        根据id 查询到对应的一个APP实名认证信息表对象  ApUserRealname
        ApUserRealname byId = getById(dto.getId());
//        根据PP实名认证信息表对象 (ApUserRealname)中的u-id查询出 APP用户信息表对象信息 ApUser
        ApUser apUser = apuseripl.selectById(byId.getUserId());
//        判断app用户对象是否为空
        if(apUser==null){
//            为空返回异常
            return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID);
        }
//        根据APP用户信息表对象信息 (ApUser)中的name 查询出对应的 自媒体用户信息表（WmUser）对象
        WmUser wmUser = feignApi.findbyname(apUser.getName());
//        自媒体用户信息表（WmUser）对象 进行非空判断
        if (wmUser==null){
//            重新赋值整个自媒体用户信息表（WmUser）对象
            wmUser=new WmUser();
//            每个（WmUser）对象 进行添加属性
            wmUser.setApUserId(apUser.getId());
            wmUser.setCreatedTime(new Date());
            wmUser.setName(apUser.getName());
            wmUser.setSalt(apUser.getSalt());
            wmUser.setPassword(apUser.getPassword());
            wmUser.setPhone(apUser.getPhone());
//            将自媒体用户信息表对象 添加到 自媒体用户信息表数据库
            feignApi.save(wmUser);

        }
//
        creatautor(wmUser);
        return null;
    }


//    自媒体用户信息表
    public void creatautor(WmUser wmUser){
//        根据自媒体用户信息表（WmUser）u-id 查找到对应的 APP文章作者信息表（ApAuthor） 的对象
        ApAuthor byId = feignArticle.findById(wmUser.getApUserId());
//        判断ApAuthor对象是否为空
        if (byId==null){
//           ApAuthor对象 重新赋值为新的对象
            byId=new ApAuthor();
//            对象属性赋值
            byId.setName(wmUser.getName());
            byId.setCreatedTime(new Date());
            byId.setType(UserConstants.AUTHOR_TYPE);
            byId.setUserId(wmUser.getApUserId());
//            将ApAuthor对象添加到APP文章作者信息表
            feignArticle.save(byId);
        }
    }

//    状态判断
    public boolean xiugaistatus(Integer status){
//        && !status.equals(UserConstants.PASS_AUTH) && !status.equals(UserConstants.FAIL_AUTH)
        if (status!=null ){
            return true;
        }
        return false;
    }
}
